package com.cy.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

/**
 * @author tang
 * @data 2021/9/17
 * @apiNode
 */
@RestController
@Slf4j
@RefreshScope
@RequestMapping("/provider")
public class ProviderController {
    //要读取的配置需要写在${}这个表达式中  ${}后面的 : 表示未读取到取的默认值
    @Value("${server.port:8080}")
    private String provider;

    //服务器启动时会将所有配置信息(配置文件或配置中心)读取到Environment对象中
    //此属性会在对象构建时初始化
    //@Value用于告诉spring从Environment对象中读取配置信息
    //将读取到的配置内容赋值给对象的属性
    @Value("${logging.level.com.cy}")
    private String logLevel;

    @Value("${server.tomcat.threads.max}")
    private  Integer maxThread;

    @Value("${page.pageSize}")
    private Integer pageSize;
    /**
     * 基于此方法实现一个字符串的回显
     * echo:回显
     * rest:一种软件架构编码风格,可以基于这种风格定义url
     * url:http://localhost:8081/privider/echo/nacos
     * @return
     */
    @GetMapping("/echo/{msg}")
    public String doRestEcho1(@PathVariable String msg){
        //通过配置中心中动态日志级别配置,控制日志信息的输出
        //常用日志级别:  trace < debug < info < warn < error
        //很多默认日志级别是info,调试程序时常用debug,项目上线改为error
        log.info("doRestEcho1 start {}",new Date());
        return provider+" 回显 "+msg+" and "+doRestLevel();
    }

    @GetMapping("/log")
    public String doRestLevel(){
        log.trace("==trace==");
        log.debug("==debug==");
        log.info("==info==");
        log.warn("==warn==");
        log.error("==error==");
        return "log level : " + logLevel;
    }

    @GetMapping("/maxThread")
    public String maxThread(){
        return "max thread : "+maxThread;
    }

    @GetMapping("/pageSize")
    public String pageSize(){
        return "pageSize : "+pageSize;
    }



}
